package com.bdqn.printer;

/**
 * 纸张实现类
 *
 * @author LILIBO
 * @since 2021-12-07
 */
public class TextPaper implements Paper {

    private int charPerLine = 16; // 每行多少个字
    private int linePerPage = 5; // 每页行数
    private String content = ""; // 纸张中的内容
    private int posX = 0; // 当前横向位置，从0开始
    private int posY = 0; // 当前行数，从0开始
    private int posP = 1; // 当前页数，从1开始

    /**
     * 输出一个字符到纸张
     *
     * @param c
     */
    @Override
    public void putInChar(char c) {
        content += c;
        ++posX;
        // 判断是否换行
        if (posX == charPerLine) {
            content += Paper.newline;
            posX = 0;
            ++posY;
        }
        // 判断是否翻页
        if (posY == linePerPage) {
            content += "-- 第" + posP + "页 --";
            content += Paper.newline + Paper.newline;
            posY = 0;
            ++posP;
        }
    }

    /**
     * 获取输出到纸张上的内容
     *
     * @return
     */
    @Override
    public String getContent() {
        StringBuilder ret = new StringBuilder(this.content); // 获取需要打印的内容
        // 进行格式化输出
        if (!(posX == 0 && posY == 0)) {
            int count = linePerPage - posY; // 需要留空的行
            for (int i = 0; i < count; i++) {
                ret.append(Paper.newline); // 给纸张留空行
            }
            ret.append("-- 第").append(posP).append("页 --"); // 在最后打印页码
        }
        return ret.toString(); // 将需要打印的内容打印到纸张的格式中
    }

    public int getCharPerLine() {
        return charPerLine;
    }

    public void setCharPerLine(int charPerLine) {
        this.charPerLine = charPerLine;
    }

    public int getLinePerPage() {
        return linePerPage;
    }

    public void setLinePerPage(int linePerPage) {
        this.linePerPage = linePerPage;
    }

    public void setContent(String content) {
        this.content = content;
    }

    public int getPosX() {
        return posX;
    }

    public void setPosX(int posX) {
        this.posX = posX;
    }

    public int getPosY() {
        return posY;
    }

    public void setPosY(int posY) {
        this.posY = posY;
    }

    public int getPosP() {
        return posP;
    }

    public void setPosP(int posP) {
        this.posP = posP;
    }

}
